print('算术运算符：')
a,b=10,21
print(a, b)

print('+', ' result=', a+b)
print('-', ' result=', a-b)
print('*', ' result=', a*b)
print('、', ' result=', a/b)
print('%', ' result=', a%b) # 10

a,b=2,3
print('**', ' result=', a**b) # 8

print('// 1', ' result=', a//b) # 0 整数
a,b=10,5
print('// 2', ' result=', a//b) # 2

# ---

print('\n比较运算符：')
a,b,c=21,10,0
print(a==a)
print(a!=b)
print(a>b)
print(a>=b)
print(a<b)
print(a<=b)

print('\n赋值运算符：')
a=1
a+=1
print(a)
a*=2
print(a)
a**=2
print(a)
a/=3
print(a)
a//=3
print(a) # 1.0

print('\n位运算符：')
a = 60 # 0011 1100
b = 13 # 0000 1101
print('a=', a)
print('b=', b)
print('&', ' result=', a & b)
print('|', ' result=', a | b)
print('^', ' result=', a ^ b)
print('~', ' result=', ~a)
print('<<2', ' result=', a<<2) # 240, 1111 0000
print('>>2', ' result=', a>>2) # 15,  0000 1111

print('\n逻辑运算符：')
a,b = 10,20
print(a, ', ', b)
print('and', ' result=', a and b) # 20
print('and', ' result=', (a and b) == True) # False
print('or', ' result=', a or b) # 10
print('or', ' result=', (a or b) == True) # False
print('not', ' result=', not a)

print(True)
print(False)

# 1220
print('\n成员运算符：')
# in, not in
a,b,list=10,20,[1,2,3,4,5,20]
print(a in list) # False
print(a not in list) # True
print(b/a in list) # True
print(b//a in list) # True

print('\n身份运算符：')
# 用于比较两个对象的存储单元
# is, is not
a,b=20,20
print(a is b)
print(a is not b)
print(id(a))
print(id(b))
print(id(a) is id(b))

b = 30
print(a is b) # False
print(a is not b) # True

# is vs ==
a = [1,2,3]
b = a
print(a is b) # True
print(a == b) # True

b = a[:]
print(a is b) # False
print(a == b) # True


# 数制
print('\n数制：')
a = 0b11000101 # 2进制 0b
b = 0xff # 16进制 0x
c = 0o127 # 8进制 0o
print(a)
print(b)
print(c)

print(bin(a)) # 二进制
print(oct(b)) # 八进制
print(hex(c)) # 十六进制

d=1000
print('d=', d)
print(bin(d)) # 二进制
print(oct(d)) # 八进制
print(hex(d)) # 十六进制

a = 5
b = 5
print(id(a))
print(id(b))
a += 1
print(id(a))
print(id(b))

a,b=1000,100
print('1000:')
print(id(a))
print(id(b))

# 211221
# 计算数字中的 符号位 1
# Python3 整数对象存储为无符号数加上符号位标志，所以不存在“负数”补码形式
# 因此，计算 “1” 的数量需要按去符号后的无符号数
a=3
print(bin(a))
print(bin(a).count('1')) # 2
a = -1
print(bin(a))
print(bin(a).count('1')) # 1
a = -3
print(bin(a))
print(bin(a).count('1')) # 2
# Python3 无长整，整数长度原则上不限，所以不能以假定的 32 位处理。

# 计算二进制数据中1的个数
a=60
n=0
while a: # #用移位方法求解，直到a移位为0为止
	if a & 1 == 1:
		n += 1 #  #将a与1进行位与操作，即可知道a的最后1位是否为1，若为1，则计数n增1，不然则无需变化n的值
	a >>= 1 # #测试了a的最后一位后，将最后一位右移移除，重新赋值给a
print(n)


